package com.android.samples.mediastore.hms.drive.utils

import android.content.Context
import com.huawei.cloud.base.auth.DriveCredential
import com.huawei.cloud.base.auth.DriveCredential.AccessMethod
import com.huawei.cloud.base.util.StringUtils
import com.huawei.cloud.client.exception.DriveCode
import java.io.File


/**
 * Credential管理类
 *
 *
 * since 1.0
 */
object CredentialManager {
    fun initCredential(): Boolean {
        val returnCode: Int = init(
            HmsSigninUtils.unionId,
            HmsSigninUtils.accessToken
        ) { HmsSigninUtils.refreshAccessToken() }
        return DriveCode.SUCCESS == returnCode
    }
    /**
     * 获取DriveCredential
     *
     * @return DriveCredential
     */
    /**
     * Drive鉴权信息
     */
    var credential: DriveCredential? = null
        private set


    /**
     * 通过上下文context和华为帐号信息（unionId，countrycode，accessToken）初始化drive。
     * 当accessToken失效时，注册一个AccessMethod去获取一个新的accessToken，传入的refreshAT不为null。
     *
     * @param unionID HwID中的unionID
     * @param at access token
     * @param refreshAT 刷新AT的回调函数，不能传入null
     */
    private fun init(unionID: String?, at: String?, refreshAT: AccessMethod?): Int {
        if (StringUtils.isNullOrEmpty(unionID) || StringUtils.isNullOrEmpty(at)) {
            return DriveCode.ERROR
        }
        val builder = DriveCredential.Builder(unionID, refreshAT)
        credential = builder.build().setAccessToken(at)
        return DriveCode.SUCCESS
    }

    /**
     * 退出Drive，清理Drive使用过程中所有的缓存信息
     */
    fun exit(context: Context) {
        // 清理缓存文件
        deleteFile(context.cacheDir)
        deleteFile(context.filesDir)
    }


    /**
     * 删除缓存文件
     *
     * @param file 指定的缓存文件
     */
    private fun deleteFile(file: File?) {
        if (null == file || !file.exists()) {
            return
        }
        if (file.isDirectory) {
            val files = file.listFiles()
            if (files != null) {
                for (f in files) {
                    deleteFile(f)
                }
            }
        }
    }

}